/**
 * 
 */
package com.iuie.ns.web.tags;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

import com.iuie.ns.web.html.HTMLTag;

/**
 * @description 表格标签
 * @author lj
 * @createTime 2016年9月11日 下午5:09:16
 */
public class TableTag extends SimpleTagSupport {
	
	private static final HTMLTag parentTable;
	private static final HTMLTag tableTag;
	// =====================属性========================/
	/** id属性 */
	private String id;
	/** table标题，&lt;caption&gt;标签内容 */
	private String caption;
	/** 是否启用排序功能，默认不启用 */
	private boolean enableSort = false;
	/** 宽度 */
	private String width = "100%";
	/** 高度 */
	private String height;
	//==================================================/
	/** tbody的内容 */
	private String body;
	/** thead的内容 */
	private String head;
	// =======================属性的set方法=======================/
	/**
	 * @param {@link #id}
	 */
	public void setId(String id) {
		this.id = id;
	}
	/**
	 * @return {@link #id}
	 */
	public String getId() {
		return id;
	}
	/**
	 * @param {@link #caption}
	 */
	public void setCaption(String caption) {
		this.caption = caption;
	}
	/**
	 * @param {@link #enableSort}
	 */
	public void setEnableSort(boolean enableSort) {
		this.enableSort = enableSort;
	}
	/**
	 * @param {@link #width}
	 */
	public void setWidth(String width) {
		this.width = width;
	}
	/**
	 * @param {@link #height}
	 */
	public void setHeight(String height) {
		this.height = height;
	}
	// ==============================================/
	
	// 得到table标签模板
	static{
		tableTag = new HTMLTag("table");
		tableTag.addAttribute("class", "m-table");
		tableTag.addContentNode(new HTMLTag("caption"));
		
		HTMLTag headTag = new HTMLTag("thead");
		tableTag.addContentNode(headTag);
		
		HTMLTag row = new HTMLTag("tr");
		headTag.addContentNode(row);
		
		tableTag.addContentNode(new HTMLTag("tbody"));
		parentTable = new HTMLTag("div");
		parentTable.addAttribute("class", "m-table");
		parentTable.addContentNode(tableTag);
	}
	
	@Override
	public void doTag() throws JspException, IOException {
		JspFragment fragment = getJspBody();
		fragment.invoke(null);
		
		initTableTag(); // 初始化table标签
		
		// 添加表格标题，<caption>标签内容
		HTMLTag captionTag = tableTag.getContentNode(0).removeTextNode();
		captionTag.setTextNode(caption);
		// 将thead的内容设置到table中去
		HTMLTag row = tableTag.getContentNode(1).removeTextNode().getContentNode(0);
		row.setTextNode(head);
		// 将tbody的内容设置到table中去
		HTMLTag bodyTag = tableTag.getContentNode(2).removeTextNode();
		bodyTag.setTextNode(body);
		
		JspWriter jspWriter = getJspContext().getOut();
		jspWriter.write(parentTable.toString());
		
	}
	/**
	 * @description 初始化table标签，为table标签添加属性
	 * @author lj
	 * @date 2016年9月23日 上午8:08:24
	 */
	private void initTableTag() {
		// 添加id属性
		tableTag.addAttribute("id", id);
		// 添加是否启用排序功能属性
		tableTag.addAttribute("data-enable-sort", String.valueOf(enableSort));
		// 设置宽度
		if(width!=null)
			tableTag.addAttribute("width", width);
		// 设置表格高度
		if (height!=null)
			tableTag.addAttribute("height", height);
	}
	/**
	 * @description tbody的内容
	 * @author lj
	 * @date 2016年10月5日 下午7:31:41
	 * @param str
	 */
	public void setBody(String body) {
		this.body = body;
	}
	
	/**
	 * @description thead的内容
	 * @author lj
	 * @date 2016年10月5日 下午7:31:41
	 * @param str
	 */
	public void setHead(String head) {
		this.head = head;
	}
}
